//package com.example.rwq_test.webrtc;
//
//import org.springframework.web.socket.WebSocketSession;
//import java.util.ArrayList;
//import java.util.List;
//
///**
// * 完善点：1. 新增WebSocketSession存储，解决类型转换问题；2. 保留原有资源管理逻辑
// */
//public class UserSession {
//    // 新增：存储对应的WebSocketSession（关键修复，避免强制转换）
//    private WebSocketSession webSocketSession;
//
//    // 原有核心字段（不变）
//    private Process mediaProcess;       // FFmpeg单进程（音视频）
//    private int audioPort;              // 音频RTP端口
//    private int videoPort;              // 视频RTP端口
//    private final List<IceCandidate> iceCandidates = new ArrayList<>(); // ICE候选列表
//    private long lastHeartbeatTime;     // 最后心跳时间（毫秒）
//    private long lastPlayPosition = 0;  // 最后播放位置（秒，续播用）
//    private String filePath;            // 当前播放文件路径（续播用）
//
//    // --------------------------
//    // 新增：WebSocketSession的getter/setter
//    // --------------------------
//    public WebSocketSession getWebSocketSession() {
//        return webSocketSession;
//    }
//    public void setWebSocketSession(WebSocketSession webSocketSession) {
//        this.webSocketSession = webSocketSession;
//    }
//
//    // --------------------------
//    // 原有字段的getter/setter（不变）
//    // --------------------------
//    public Process getMediaProcess() {
//        return mediaProcess;
//    }
//    public void setMediaProcess(Process mediaProcess) {
//        this.mediaProcess = mediaProcess;
//    }
//    public int getAudioPort() {
//        return audioPort;
//    }
//    public void setAudioPort(int audioPort) {
//        this.audioPort = audioPort;
//    }
//    public int getVideoPort() {
//        return videoPort;
//    }
//    public void setVideoPort(int videoPort) {
//        this.videoPort = videoPort;
//    }
//    public void addIceCandidate(IceCandidate candidate) {
//        this.iceCandidates.add(candidate);
//    }
//    public List<IceCandidate> getIceCandidates() {
//        return iceCandidates;
//    }
//    public void updateHeartbeat() {
//        this.lastHeartbeatTime = System.currentTimeMillis();
//    }
//    public long getLastHeartbeatTime() {
//        return lastHeartbeatTime;
//    }
//    public long getLastPlayPosition() {
//        return lastPlayPosition;
//    }
//    public void setLastPlayPosition(long lastPlayPosition) {
//        this.lastPlayPosition = lastPlayPosition;
//    }
//    public String getFilePath() {
//        return filePath;
//    }
//    public void setFilePath(String filePath) {
//        this.filePath = filePath;
//    }
//
//    // --------------------------
//    // 资源释放逻辑（不变，确保进程销毁）
//    // --------------------------
//    public void release() {
//        // 销毁FFmpeg进程
//        if (mediaProcess != null && mediaProcess.isAlive()) {
//            mediaProcess.destroyForcibly();
//            try {
//                mediaProcess.waitFor();
//                logProcessDestroy(mediaProcess.pid());
//            } catch (InterruptedException e) {
//                Thread.currentThread().interrupt();
//                System.err.println("FFmpeg进程销毁等待中断: " + e.getMessage());
//            }
//        }
//        // 清空ICE候选（避免内存泄漏）
//        iceCandidates.clear();
//        // 置空WebSocketSession（避免引用泄漏）
//        this.webSocketSession = null;
//    }
//
//    // 辅助方法：打印进程销毁日志
//    private void logProcessDestroy(long pid) {
//        System.out.printf("FFmpeg进程[PID:%d]已强制销毁%n", pid);
//    }
//}